// obserer.js 
/**
 * 观察者 模式 
 * 观察者
 * 被观察者
 * 观察者需要放到被观察中， 被观察者的状态发生变化需要通知观察者，我变化啦
 * 
 * 内部也是基于发布订阅模式
 *  收集观察者
 *  状态变化后通知观察者
 */

 class Subject { //被观察者  小宝宝
    constructor(name) {
        this.name = name
        this.state = '开心的'
        this.obserers = []
    }
    attach(o) { // Subject.prototype.attach
        this.obserers.push(o)
    }
    setState(newState) {
        this.state = newState
        this.obserers.forEach(o => o.update(this))
    }
 }

 class Obserer{ // 观察者  我 我媳妇
    constructor(name) {
        this.name = name
    }
    update(subject) {
        console.log(`当前${this.name}被通知啦  当前小宝宝的状态是 ${subject.state}`)
    }
 }

 // 我和 我媳妇   需要观察小宝宝的心理状态变化
 let baby = new Subject('小宝宝')
 let parent = new Obserer('爸爸')
 let mother = new Obserer('妈妈')
 bady.attach(parent)
 bady.attach(mother)
 baby.setState('被欺负啦')





